package cn.elves.model.draw.service.algorithm;

import cn.elves.model.strategy.entity.po.StrategyDetail;

import java.util.List;


public interface DrawAlgorithm {

    /**
     * @param strategyId    策略ID
     * @param strategyMode  抽奖策略模式
     * @param scale         规模根据中奖概率进行分配
     * @param awardRateList 奖品概率配置集合 「值示例：AwardRateInfo.awardRate = 0.04」
     */
    void prepare(Long strategyId, Integer strategyMode, Integer scale, List<StrategyDetail> awardRateList);

    /**
     * 判断是否已经，做了数据初始化
     *
     * @param strategyId 策略ID
     * @return 判断结果
     */
    boolean isInit(Long strategyId);

    /**
     * SecureRandom 生成随机数，索引到对应的奖品信息返回结果
     *
     * @param strategyId      策略ID
     * @param excludeAwardIds 排除掉已经不能作为抽奖的奖品ID，留给风控和空库存使用
     * @return 中奖结果
     */
    String randomDraw(Long strategyId, List<String> excludeAwardIds);

}
